// 自己选择的路，跪着也要走完。朋友们，虽然这个世界日益浮躁起来,只
// 要能够为了当时纯粹的梦想和感动坚持努力下去，不管其它人怎么样,我
// 们也能够保持自己的本色走下去。                      ——AKPower
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <set>
#define IOS ios::sync_with_stdio(false), cin.tie(0)
using namespace std;
typedef long long ll;
bool vis[1100];
ll a[1100];
struct node{
    ll x,step;
};
queue<node> p;
int main()
{
    IOS;
    ll n;
    while(cin>>n&&n){
        memset(vis,false,sizeof(vis));
        node t;
    t.x=1;
    t.step=0;
    p.push(t);
    a[0]=1;
    ll k=1;
    vis[1]=true;
    while(!p.empty()){
        node temp=p.front();
        p.pop();
        cout<<temp.x<<endl;
        if(temp.x==n){
            cout<<temp.step<<endl;
            break;
        }
        ll cnt=k;
        for(ll i=0;i<cnt;i++){
            ll ty=a[i]+t.x;
            if(vis[ty])continue;
            vis[ty]=true;
            t.x=ty;
            t.step=temp.step+1;
            p.push(t);
            a[k++]=ty;
        }
        cnt=k;
        for(ll i=0;i<cnt;i++){
            ll ty=t.x-a[i];
            if(ty<0||vis[ty])continue;
            vis[ty]=true;
            t.x=ty;
            t.step=temp.step+1;
            p.push(t);
            a[k++]=ty;
        }
    }
    while(!p.empty())p.pop();
    }
    getchar();
    getchar();
    return 0;
}
